<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 解构赋值 就是按照一定的模式将对象或者数组中的数据取出赋值给变量 但是其实字符串也可以直接进行解构赋值
        // 无论是对象的解构赋值还是数组的解构赋值 =号 两边的数据类型都要保持一致 前后数据结构也要保持一致
        // var a, b, c, d = arr
        // console.log(a, b, c);
        // console.log(d)
        // 数组的解构赋值
        // --------------------------------------------
        // 数组的解构赋值 数组的解构赋值是按照前后数据的索引值一一对应的
        var a = 1;
        var b = 2;
        var [a, b] = [b, a]
        console.log(b, a);
        // var arr = [1, 2, 3, 4]
        // var [a, b, , d] = arr
        // console.log(a, b, d);
        // ----------------------------------------------
        var arr = [1, [2, 3, [4]]]
        var [a, [b, c, [d]]] = arr
        console.log(a, b, c, d);
        // --------------------------------------------
        // 数组解构时的默认值
        // var arr = [1, 2, 3, 4, undefined]
        // var [a, b, c, d, e = 5] = arr
        // console.log(a, b, c, d, e);
        // let arr = []
        // arr.length = 3
        // console.log(arr);
        // let [a = 1, b = 2, c = 3] = arr
        // console.log(a, b, c);
        // ---------------------------------------------
        // 对象的解构赋值 对象的解构赋值是按照key一一对象的
        var obj = {
            name: "张三",
            age: 16,
            tel: 110
        }

        let {
            name
        } = obj
        console.log(name);
        // ------------------------------------------------
        // let obj = {
        //     name: '张三',
        //     info: {
        //         id: '123',
        //         pwd: "123456"
        //     }
        // }
        // let {
        //     info: {
        //         accound = 1234
        //     }
        // } = obj
        // console.log(accound);
        // 解构赋值的rest参数 rest参数会将剩余的所有数据赋值给rest参数
        // let arr = [1, 2, 3]
        // let [a, ...b] = arr
        // console.log(a)
        // console.log(b)
        // -----------------------------------
        // let arr = [1, 2, 3]
        // let [...a, b] = arr
        // console.log(a);
        // let obj = {
        //     name: '张三',
        //     age: 16,
        //     tel: 110
        // }
        // let {
        //     name,
        //     ...obj2
        // } = obj
        // console.log(obj2);
        // 函数参数的解构赋值
        // function fn(a, b, ...c) {
        //     // console.log(arguments);
        //     console.log(a, b, c);
        // }
        // fn(1, 2, 3, 4)
        // function fn({
        //     method = 'get'
        // }) {
        //     console.log(method);
        // }

        // fn({
        //     url: '',
        //     data: {}
        // })
        // 字符串的解构赋值 字符串的解构赋值适用于数组的解构赋值
        // var str = "" + "德玛西亚"
        // var str2 = "德玛西亚"
        // console.log(str == str2);
        // console.log(str[1]);
        // console.log(str.length);
        // let [, b] = str
        // console.log(a, b, c, d);
        // console.log(b);
        // let arr = [1, 2, 3]
        // let arr2 = [4, 5, 6]
        // console.log([...arr, ...arr2]);
        // let num = 123
        // let i = str.indexOf('')
        // console.log(i);
    </script>
</body>

</html>